package szoftlab4;

import java.util.ArrayList;

/**
 * Jelgenerátor előre megadott, illetve futás közben változtatható jelsorozattal,
 * amelyet ciklikusan léptetve megjelenít a kimenetén.
 * @author Peti
 */
@SuppressWarnings("LeakingThisInConstructor")
public class Jelgenerator extends AktivAtomiElem implements NemVezetekEpitoelem
{

    private ArrayList<Boolean> sorozat;
    private int ittTart;

    /**
     * A jelgenerátor konstruktora. Létrehozza a jelgenerátor kimenetét.
     */
    public Jelgenerator()
    {
        Logger.log(this, HivasTipus.Create, "Jelgenerator", "Jelgenerator()");
        kimenetek.add(new Kimenet());
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "Jelgenerator()");
    }

    /**
     * A jelsorozat beállítása.
     *
     * @param s
     * A megadott új jelsorozat.
     */
    public void setSorozat(ArrayList<Boolean> s)
    {
        Logger.log(this, HivasTipus.Call, "Jelgenerator", "void setSorozat(ArrayList<Boolean> s)");
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "void setSorozat(ArrayList<Boolean> s)");
    }

    /**
     * Visszaállítja a sorozatot a kezdeti pozícióba.
     */
    public void visszaallit()
    {
        Logger.log(this, HivasTipus.Call, "Jelgenerator", "void visszaallit()");
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "void visszaallit()");
    }

    /**
     * Léptet a sorozaton.
     */
    public void leptet()
    {
        Logger.log(this, HivasTipus.Call, "Jelgenerator", "void leptet()");
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "void leptet()");
    }

    /**
     * A sorozat aktuális eleme alapján értéket ad a kimenetének.
     */
    public void szamol()
    {
        Logger.log(this, HivasTipus.Call, "Jelgenerator", "void szamol()");
        kimenetek.get(0).setErtek(null);
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "void szamol()");
    }

    /**
     * Csatlakozást kezdeményez egy megadott sorszámú bemenetéről egy másik
     * építőelem megadott sorszámú kimenetére.
     *
     * @param bemenetIndexe
     * A megadott bemenet sorszáma.
     *
     * @param cel
     * A másik építőelem.
     *
     * @param kimenetIndexe
     * A másik építőelem megadott kimenetének sorszáma.
     *
     */
    public void csatlakozik(int bemenetIndexe, Epitoelem cel, int kimenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Jelgenerator", "void csatlakozik(int bemenetIndexe, Epitoelem cel, int kimenetIndexe)");
        bemenetek.get(bemenetIndexe).csatlakozik(this, cel, bemenetIndexe, kimenetIndexe);
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "void csatlakozik(int bemenetIndexe, Epitoelem cel, int kimenetIndexe)");
    }

    /**
     * Csatlakozást fogad egy vezeték megadott sorszámú bemenetéről
     * egy megadott sorszámú kimenetére.
     *
     * @param bemenetIndexe
     * A kezdeményező vezeték megadott bemenetének sorszáma.
     *
     * @param innen
     * A kezdeményező vezeték.
     *
     * @param kimenetIndexe
     * A megadott kimenet sorszáma.
     *
     * @return
     * A csatlakozásra kijelölt kimenet.
     *
     */
    public Kimenet csatlakozik(int bemenetIndexe, Vezetek innen, int kimenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Jelgenerator", "void csatlakozik(int bemenetIndexe, Vezetek innen, int kimenetIndexe)");
        kimenetek.get(kimenetIndexe).csatlakozik(this, innen, bemenetIndexe);
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "void csatlakozik(int bemenetIndexe, Vezetek innen, int kimenetIndexe)");
        return null;
    }

    /**
     * Csatlakozást fogad egy nem vezeték típusú építőelem megadott sorszámú
     * bemenetéről egy megadott sorszámú kimenetére.
     *
     * @param bemenetIndexe
     * A kezdeményező építőelem megadott bemenetének sorszáma.
     *
     * @param innen
     * A kezdeményező építőelem.
     *
     * @param kimenetIndexe
     * A megadott kimenet sorszáma.
     *
     * @return
     * A csatlakozásra kijelölt kimenet.
     *
     */
    public Kimenet csatlakozik(int bemenetIndexe, NemVezetekEpitoelem innen, int kimenetIndexe)
    {
        Logger.log(this, HivasTipus.Call, "Jelgenerator", "void csatlakozik(int bemenetIndexe, NemVezetek innen, int kimenetIndexe)");
        kimenetek.get(kimenetIndexe).csatlakozik(this, innen, bemenetIndexe);
        Logger.log(this, HivasTipus.Return, "Jelgenerator", "void csatlakozik(int bemenetIndexe, NemVezetek innen, int kimenetIndexe)");
        return null;
    }
}
